前幾天一直在看 IP、Subnet、ARP、Default Gateway、Routing Table。
老實說,看概念的時候好像都懂,但只要沒有真的把設備接起來,還是會有一種:
所以 Router 到底是在幹嘛?
的感覺。
今天乾脆直接打開 Cisco Packet Tracer。
目標很單純:
PC
↓
Router0
↓
Router1
↓
Server
讓 PC 最後可以真的找到 Server。
實際操作之後,可以把前幾天幾個一直有點模糊的概念串起來xd
這篇不是 Packet Tracer 的完整操作手冊,不過如果第一次打開,可能可以先把今天會用到的東西放上去?
左下角可以選設備類型。
先放:
End Devices
→ PC
→ Server
Network Devices
→ Routers
→ 1941 × 2
最後畫面上大概會有:
PC0 Router0 Router1 Server0
我們選 1941,是因為它的 G0/0、G0/1 很直觀,拿來看兩個不同網段滿適合的。
左下角的 Connections 裡有一個閃電圖示:
Automatically Choose Connection Type
如果現在還不想先研究 Straight-Through、Cross-Over,可以先用這個,讓 Packet Tracer 幫忙選線。
今天接成:
PC0 FastEthernet0
→ Router0 GigabitEthernet0/0
Router0 GigabitEthernet0/1
→ Router1 GigabitEthernet0/0
Router1 GigabitEthernet0/1
→ Server0 FastEthernet0
如果剛接上時看到紅色,不一定代表接錯。
Cisco Router 的介面預設可能還是關閉的,後面打:
no shutdown
之後才會真的起來。
點 PC0 或 Server0:
Desktop
→ IP Configuration
就可以輸入:
IP Address
Subnet Mask
Default Gateway
所以 PC0 等一下會填:
IP Address: 192.168.1.10
Subnet Mask: 255.255.255.0
Default Gateway: 192.168.1.1
Server0 則會填:
IP Address: 10.0.0.20
Subnet Mask: 255.255.255.0
Default Gateway: 10.0.0.1
點 Router:
CLI
如果第一次開啟看到:
Would you like to enter the initial configuration dialog? [yes/no]:
這次可以先輸入:
no
然後按 Enter,就會看到 Cisco IOS 的 CLI。
接下來文章裡出現的:
enable
configure terminal
interface gigabitEthernet 0/0
就是從這裡輸入。
到這裡就夠了。
今天不是要先學會 Packet Tracer 每一個按鈕,而是先把:
PC → Router → Router → Server
這條路真的搭起來,再看 Packet 到底怎麼走。
最後要做成:
PC0
192.168.1.10/24
GW 192.168.1.1
│
│
Router0
G0/0 192.168.1.1/24
G0/1 192.168.12.1/30
│
│
Router1
G0/0 192.168.12.2/30
G0/1 10.0.0.1/24
│
│
Server0
10.0.0.20/24
GW 10.0.0.1
乍看 IP 很多。
但其實拆開之後,就是三個 Network:
192.168.1.0/24
192.168.12.0/30
10.0.0.0/24
第一個是 PC 和 Router0。
第二個是 Router0 和 Router1。
第三個是 Router1 和 Server。
先設定 PC0:
IP Address: 192.168.1.10
Subnet Mask: 255.255.255.0
Default Gateway: 192.168.1.1
Router0 則設定 G0/0:
enable
configure terminal
interface gigabitEthernet 0/0
ip address 192.168.1.1 255.255.255.0
no shutdown
第一次看到這幾行的時候,其實還是會把它理解成:
在設定 Router 的 IP。
但這個理解不夠精確。
其實是在設定:
Router0 的 G0/0
IP = 192.168.1.1/24
也就是 IP 是設定在 interface 上。
這行:
interface gigabitEthernet 0/0
不是在設定 IP。
它只是告訴 Router:
接下來我要設定 G0/0 這個 interface。
接下來:
ip address 192.168.1.1 255.255.255.0
才是真的把 IP 掛到這個 interface 上。
最後:
no shutdown
則是把這個 interface 啟用。
所以可以拆成:
interface gigabitEthernet 0/0
→ 選 G0/0
ip address ...
→ 設定它的 IP
no shutdown
→ 把它打開
這是今天一個很重要的發現。
原本腦中會把 Router 想成:
Router
= 一個 IP
但其實不是。
Router0 可以是:
G0/0 = 192.168.1.1/24
G0/1 = 192.168.12.1/30
Router1 可以是:
G0/0 = 192.168.12.2/30
G0/1 = 10.0.0.1/24
更精確地說:
Router 的不同 Layer 3 interface,可以有不同 IP。
Router 就是靠這些不同 interface,站在不同 Network 裡。
例如 Router0:
192.168.1.0/24
│
│ G0/0
│ 192.168.1.1
│
Router0
│
│ G0/1
│ 192.168.12.1
│
192.168.12.0/30
這樣 Router 才有辦法把不同 Network 接起來。
Layer 3 是:
IP
Subnet
Routing
Packet
也就是一個「網路層的概念」。
而 Layer 3 interface 是:
可以設定 IP、參與 IP Routing 的 interface。
所以:
Layer 3
≠
Layer 3 interface
可以粗略理解:
Layer 3
= IP / Routing 這套規則
Layer 3 interface
= 可以使用這套規則的介面
像 Router 的 G0/0、G0/1,就是我們現在使用的 Layer 3 interface。
而 Layer 3 interface 也不等於「實體層」。
G0/0 的確是一個真的網路孔,但資料從它出去時,其實會同時碰到:
Layer 3
IP / Routing / Packet
Layer 2
Ethernet / MAC / Frame / FCS
Layer 1
Bits / Cable / Signal
目前先不用急著背完整 OSI 七層。
至少先知道:
Layer 和 Layer interface 是不同概念。
就先夠用了。
前面學 Ethernet Frame 時看過:
Destination MAC
Source MAC
Payload
FCS
FCS 全名是 Frame Check Sequence。
它放在 Ethernet Frame 尾端,主要用途是:
檢查這個 Frame 在傳輸過程中有沒有發生錯誤。
傳送端會依據 Frame 的內容算出檢查值;接收端收到後再重新計算。
如果結果對不上,就知道這個 Frame 可能在傳輸途中壞掉了。
所以目前可以非常粗略地記:
Layer 3
IP / Routing
Packet
↓ 包進
Layer 2
Ethernet / MAC / FCS
Frame
↓ 真的送出去
Layer 1
Bits / Cable / Signal
接著把兩台 Router 接起來。
這段使用:
192.168.12.0/30
Router0:
G0/1 = 192.168.12.1
Router1:
G0/0 = 192.168.12.2
Router0 設定:
enable
configure terminal
interface gigabitEthernet 0/1
ip address 192.168.12.1 255.255.255.252
no shutdown
Router1:
enable
configure terminal
interface gigabitEthernet 0/0
ip address 192.168.12.2 255.255.255.252
no shutdown
/30 的 Subnet Mask 是:
255.255.255.252
Block Size:
256 - 252 = 4
所以第一個 /30 網段有:
192.168.12.0
192.168.12.1
192.168.12.2
192.168.12.3
在這個練習裡:
.0 → Network Address
.1 → Router0
.2 → Router1
.3 → Broadcast
剛好只有兩台 Router 要用 IP,所以 /30 很適合拿來當這條點對點連線的練習。
設定完之後,在 Router0:
ping 192.168.12.2
第一次看到:
.!!!!
以及:
Success rate is 80 percent (4/5)
一開始會以為哪裡壞掉。
其實第一個 ICMP Echo 很可能正在等 ARP。
Router0 知道:
我要找 192.168.12.2
但還不知道:
192.168.12.2 的 MAC 是多少?
所以先:
ARP Request
↓
ARP Reply
↓
取得 MAC
↓
開始送 ICMP
等 ARP Table 裡已經有資料之後,再 Ping 通常就可以直接成功。
這也是第一次真的看到:
IP 和 MAC 不是兩套完全分開的東西。
Router 要在 Ethernet 上把 Frame 送給下一跳,還是需要知道下一跳的 MAC。
最後一段:
Router1
↓
Server0
Router1 的 G0/1:
interface gigabitEthernet 0/1
ip address 10.0.0.1 255.255.255.0
no shutdown
Server0:
IP Address: 10.0.0.20
Subnet Mask: 255.255.255.0
Default Gateway: 10.0.0.1
所以這段就是:
Router1 G0/1
10.0.0.1/24
│
│
Server0
10.0.0.20/24
在 Router1:
ping 10.0.0.20
同樣第一次可能看到:
.!!!!
如果後面有 Reply,就代表 Router1 到 Server 這一段已經正常。
這次也第一次真的使用:
show ip interface brief
例如 Router0:
GigabitEthernet0/0 192.168.1.1 up up
GigabitEthernet0/1 192.168.12.1 up up
這可以快速確認:
interface 是哪一個
IP 是多少
介面有沒有起來
今天還看到:
Vlan1 unassigned administratively down down
目前先不理它。
至少知道:
unassigned
→ 沒 IP
administratively down
→ 被設定成關閉
之後學 Switch、VLAN、SVI 再回來。
目前:
PC0 ↔ Router0 OK
Router0 ↔ Router1 OK
Router1 ↔ Server0 OK
看起來每一段都通。
但有個問題。
Router0 的 Routing Table:
show ip route
可以看到:
C 192.168.1.0/24
C 192.168.12.0/30
其中:
C = Connected
代表這些 Network 是 Router0 自己直接連上的。
例如:
192.168.1.0/24
→ 從 G0/0
192.168.12.0/30
→ 從 G0/1
但 Routing Table 裡沒有:
10.0.0.0/24
所以如果 Router0 收到:
Destination IP = 10.0.0.20
它會遇到一個很單純的問題:
我不知道 10.0.0.0/24 在哪裡。
這時才需要 Static Route。
在 Router0:
configure terminal
ip route 10.0.0.0 255.255.255.0 192.168.12.2
這一行拆開:
ip route
→ 手動建立一條路由
10.0.0.0
255.255.255.0
→ 目的 Network 是 10.0.0.0/24
192.168.12.2
→ 下一跳是 Router1
所以整句其實就是:
Router0,如果你要去 10.0.0.0/24,把 Packet 交給 192.168.12.2。
192.168.12.2 就是 Router1 的 G0/0。
但這樣還沒結束。
Router0 現在知道:
怎麼去 Server
Router1 也必須知道:
怎麼回 PC
所以 Router1 還要:
configure terminal
ip route 192.168.1.0 255.255.255.0 192.168.12.1
意思就是:
要去 192.168.1.0/24,下一跳找 Router0 的 192.168.12.1。
最後路徑才完整:
去程
PC0
↓
Router0
↓
Router1
↓
Server0
回程
Server0
↓
Router1
↓
Router0
↓
PC0
這裡也終於理解:
網路不是「送得到」就夠了,Reply 也要有路回來。
從 PC0:
ping 10.0.0.20
如果 Routing Table、Default Gateway、IP、Subnet Mask 都正確,就應該可以完成:
PC0
192.168.1.10
│
▼
Router0
│
▼
Router1
│
▼
Server0
10.0.0.20
這次 Ping 已經不是同一個 Network 裡面的測試。
而是真正跨過:
192.168.1.0/24
↓
192.168.12.0/30
↓
10.0.0.0/24
三個 Network。
平常電腦連上 Wi-Fi,DHCP 通常就會自動取得:
IP Address
Subnet Mask
Default Gateway
DNS
電腦也會自動建立需要的基本 Routing Table。
家裡的 Router 通常也已經有:
LAN 的 Connected Route
+
往 ISP 的 Default Route
所以一般使用者根本不會看到這些設定。
我們現在手動打 Static Route,是為了看懂:
Router 到底怎麼知道 Packet 下一步要去哪裡?
而大型網路如果 Router 很多,也不可能全部人工設定 Static Route。
之後會再碰到 OSPF、BGP 之類的 Dynamic Routing Protocol,讓 Router 彼此交換路由資訊。
前幾天講 Router 的時候,大概知道:
不同 Network 需要 Router。
但今天把設備真的接起來之後,理解變得比較具體。
Router 不是單純:
收到 Packet
↓
轉出去
而是:
收到 Packet
↓
看 Destination IP
↓
查 Routing Table
↓
決定下一跳
↓
如果下一跳走 Ethernet
還要知道下一跳 MAC
↓
包成新的 Ethernet Frame
↓
送出去
所以目前可以先把前幾天的東西串成:
IP
→ 我最終要去哪裡
Subnet Mask
→ 判斷目的地是不是同一個 Network
Default Gateway
→ 不同 Network 時先交給誰
ARP
→ 下一跳的 IP 對應哪個 MAC
Routing Table
→ Router 知道哪些 Network 怎麼走
Static Route
→ 人工補一條 Router 原本不知道的路
這樣 Router 就終於不再只是拓樸圖中間那一顆圖示了。
它是真的會:
收到一個 Packet,查表,決定下一步往哪走。
這一篇實際碰到的指令:
interface
ip address
no shutdown
ping
show ip interface brief
show ip route
ip route
但最重要的不是把它們背下來。
而是終於看到:
一個 Router 可以有多個 interface
↓
每個 Layer 3 interface 可以有自己的 IP
↓
Router 因此可以同時連到不同 Network
↓
Routing Table 決定 Packet 下一步往哪裡走